package com.ys.p4Queue队列;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 描述:
 * queue 队列 FIFO 先进先出
 * 1:入队就是添加,出队就是删除
 * 1.队列的概述
 * 生活中，也存在着队列，例如：排队打饭，最先排队的人最先打饭，最后排队的人最后打饭。
 * 2.队列的特点
 * 先进先出（FIFO，First In First Out），因此我们也称队列为FIFO表。
 * 3.Java提供的队列
 * 在java语言中，专门提供了一个Queue接口。这个接口就是用于实现队列的操作，当然Queue接口用的实现类是LinkedList类。
 * 4.Queue接口中方法
 * a)把元素添加到队尾
 * boolean add(E e);
 * boolean offer(E e);
 * 这两个方法都是在尾部添加元素。add()会在长度不够时抛出异常;  offer()则不会,只返回false
 * <p>
 * b)获得队首的元素，队首元素不出队
 * E element();
 * E peek();
 * 这两个方法都是查看头部元素，返回头部元素，但不改变队列。element()会在没元素时抛出异常;  peek()则返回null;
 * <p>
 * c)获得队首的元素，然后队首元素出队
 * E remove();
 * E poll();
 * 这两个方法都是删除头部元素，返回头部元素，并且从队列中删除。remove()会在没元素时抛出异常;  poll()返回null; 
 * <p>
 * d)查看队列是否为空
 * boolean isEmpty();	判断队列是否为空，如果为空则返回true；否则返回false。
 *  LinkedList 是Queue的实现类 ---LinkedList 底层是基于双向链表实现的 限定方向的情况下就可以做队列了
 * 5.模拟队列的实现
 * a)通过数组来模拟队列
 * b)通过单链表来模拟队列
 *
 * @author CodeYang
 * @version 2020/12/25 15:04
 */
public class p1队列使用初解 {

    public static void main(String[] args) {
        /**
         *  LinkedList 是Queue的实现类 : 所以可以 可以使用多态
         */
        Queue queue = new LinkedList<String>();
        // 添加进入队列 offer add
        queue.add("0");
        // add 会在长度不够时抛出异常
        queue.offer("1");
        queue.offer("2");
        queue.offer("3");
        queue.offer("4");
        // 先进先出  查看队头
        System.out.println("队首:"+queue.peek());
        while (!queue.isEmpty()) {
            // 出队 poll() 删除---队首
            System.out.println(queue.poll());
        }
    }

}
